package beans;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.StringTokenizer;
	/**
	 * dato l'ip restituisce il codice del Paese
	 **/	

public class IP2Country {

	private String findCountry(Long IPAddress){
			
	    ResultSet result;
	    Query1 dbConnection=new Query1();
		
		String query="SELECT nation FROM ip WHERE init>="+IPAddress+" AND end <="+IPAddress+" ;";
		//qui quindi devo usare la classe Query1 e ottenere il risultato, poi lo restituisco.
		try {
		result = dbConnection.executeQuery(query);
		// l'unico modo per verificare se sono state ottenute delle righe di risultati Ãš usare result.next() 
		if (result.next()) {
			// bisogna far tornare il cursore nella posizione iniziale  
			result.beforeFirst();
			return result.getString("nation");
		}
		}
	    catch (SQLException e) {
		   e.printStackTrace();
		   //out.println("errore nella query utente");
	    } catch (Exception e) {
		   e.printStackTrace();
	    }
		return null;//se non ho un risultato restituisco niente
	}
	
	
	public String getCountryCode(String IPAddress){
		StringBuffer buffer = new StringBuffer(IPAddress);

	       /*non mi sembra molto sensato questo pezzo*/
		int index = buffer.indexOf(",");
		// See if there is  comma
		if(index > 0){
		   int length = buffer.length();
		   buffer = buffer.delete(index, length);
		}

		StringTokenizer tokens = new StringTokenizer(buffer.toString(), ".", false);

		long answer = 0L;
		int counter = 3;

		while(tokens.hasMoreTokens() && counter >= 0){     //contatore>=0 perchè sono sempre 4 tokens
			try{
				long read = new Long(tokens.nextToken()).longValue();                          //poi spostare la dichiarazione fuori
				long calculated = new Double(read *(Math.pow(256, counter))).longValue();
				answer += calculated;
				counter--;
			} catch (Exception e){
				//nel caso in cui l'indirizzo fornito non sia valido
//				e.printStackTrace();
			}
		}
		//Long IPValue = new Long(answer);
		return findCountry(answer);
	}
}
